package com.ashbur.Array;

/**
 * @author : Eumenides
 * @Description : 手动封装Array
 * @Date : 2022/7/23
 * @Copyright ： 公众号：菜鸟的大厂梦
 */
public class Array {

    private int[] data;

    private int size;

    /**
     * 构造函数，传入数组容量capacity构造Array
     * @param capacity 初始化数组容量
     */
    public Array(int capacity){
        data = new int[capacity];
        size = 0;
    }

    /**
     * Array无参构造函数,默认数组容量为10
     */
    public Array(){
        this(10);
    }

    /**
     * 获取数组元素个数
     * @return 数组元素个数
     */
    public int getSize() {
        return size;
    }

    /**
     * 获取数组容量
     * @return 数组的容量
     */
    public int getCapacity(){
        return data.length;
    }

    /**
     * 数组是否为空
     * @return 返回结果
     */
    public boolean isEmpty(){
        return size == 0;
    }

    /**
     * 向数组末尾添加元素
     * @param e 需要添加的元素
     */
    public void addLast(int e) {
        add(size,e);
    }

    /**
     * 向数组头部添加元素
     * @param e 需要添加的元素
     */
    public void addFirst(int e) {
        add(0,e);
    }

    /**
     * 在数组指定位置插入元素
     * @param index 待插入元素的位置
     * @param e 待插入元素
     */
    public void add(int index, int e){
        // 数组已满，添加元素错误
        if (size == data.length) {
            throw new IllegalArgumentException("Add Failed, Array is Full");
        }
        // 判断index合法
        if (index < 0 || index > size) {
            throw new IllegalArgumentException("Add Failed, Require index >= 0 and  index < size");
        }
        // index之后的元素每一个元素向后挪一位
        for (int i = size - 1; i >= index; i-- ) {
            data[i+1] = data[i];
        }
        //赋值
        data[index] = e;
        size++;
    }
}
